package leetcode;
/*
941. 有效的山脉数组
给定一个整数数组 A，如果它是有效的山脉数组就返回 true，否则返回 false。

让我们回顾一下，如果 A 满足下述条件，那么它是一个山脉数组：

A.length >= 3
在 0 < i < A.length - 1 条件下，存在 i 使得：
A[0] < A[1] < ... A[i-1] < A[i]
A[i] > A[i+1] > ... > A[A.length - 1]
思路：
1.长度必须大于等于三
2.分为两部分，上坡段和下坡段
2.1 开始为上坡段记标识为up=true 每个数比后一个数小
2.2 up=true时碰到一个数比后一个数大，则进入下坡段，每个数必须比后一个数大
2.3 必须有上坡段和下坡段，记录上坡段下坡段数量 upCount>0 downCount>0
 */
public class Test0941 {
    public boolean validMountainArray(int[] A) {
//        if(A.length<3)
//            return false;
//        boolean up=true;
//        int upCount=0,downCount=0;
//
//        for(int i=0;i<A.length-1;i++){
//            if(A[i+1]==A[i])
//                return false;
//            if(up==true){//上坡
//                if(A[i]<A[i+1]){
//                    upCount++;
//                }
//                else if(A[i]>A[i+1]){//拐点
//                    if(upCount==0)
//                        return false;//没有上坡
//                    up=false;
//                    downCount++;
//                }
//            }
//            else {//下坡
//                if(A[i]<A[i+1]){
//                    return false;
//                }
//                else if(A[i+1]<A[i]){
//                    downCount++;
//                }
//            }
//        }
//        return downCount>0&&upCount>0;
        int N = A.length;
        int i = 0;
        // walk up
        while (i+1 < N && A[i] < A[i+1])
            i++;
        // peak can't be first or last
        if (i == 0 || i == N-1)
            return false;
        // walk down
        while (i+1 < N && A[i] > A[i+1])
            i++;
        return i == N-1;
    }
}
